﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Web.Script.Serialization;
using System.Web.Services;
using System.Web.Script.Services;
using System.Web.UI.WebControls;
using System.Collections;
using Telerik.Web.UI;
using System.Text;
using SIM.Util;

namespace SIM.Geo.UI
{
    public class PageBase : System.Web.UI.Page
    {
        public const string MSG_ERROR_GRABAR = "No se ha podido guardar. En caso que el problema persista contacte con administrador.";
        public const string MSG_ERROR_ELIMINAR = "No se ha podido eliminar el registro, verifique que no tengo información asociado a este registro. En caso que el problema persista contacte con administrador.";
        public const string MSG_ERROR_GENERICO = "Se ha producido un error inesperado y este ha sido registrado. En caso que el problema persista contacte con administrador.";
        public const string MSG_ERROR_LOGUEO = "Se ha producido un error inesperado al intentar conectarse. En caso que el problema persista contacte con administrador.";

        public const string MSG_OK_GRABAR = "Se ha guardado exitosamente. ";
        public const string MSG_OK_ELIMINAR = "Se ha eliminado exitosamente. ";
        public const string MSG_OK_GENERICO = "Se realizado la acción exitosamente. ";

        public const string BUTTON_TOOLTIP_DESHABILITADO = "Opción dehabilitado.";
        public const string BUTTON_TOOLTIP_AGREGAR = "Agregar";
        public const string BUTTON_TOOLTIP_FINALIZAR = "Finalizar";

        public const string CSS_INPUT_DISABLED = "input-disabled";

        public Auditoria _auditoria = new Auditoria();

        /// <summary>
        /// Deserializa con JSon
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="context"></param>
        /// <returns></returns>
        public T Deserialize<T>(HttpContext context)
        {
            //read the json string
            string jsonData = new StreamReader(context.Request.InputStream).ReadToEnd();

            //cast to specified objectType
            var obj = (T)new JavaScriptSerializer().Deserialize<T>(jsonData);

            //return the object
            return obj;
        }

        /// <summary>
        /// Deserializa con JSon
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="context"></param>
        /// <returns></returns>
        public T Deserialize<T>(string context)
        {
            //cast to specified objectType
            var obj = (T)new JavaScriptSerializer().Deserialize<T>(context);

            //return the object
            return obj;
        }

        #region "Metodos"

        /// <summary>
        /// Metodo para llenar un DropdownList
        /// </summary>
        /// <param name="dropDownList"></param>
        /// <param name="data"></param>
        public void Bind(DropDownList dropDownList, IEnumerable data, string value, string text, bool insertItemSelect)
        {
            dropDownList.DataSource = data;
            dropDownList.DataValueField = value;
            dropDownList.DataTextField = text;
            dropDownList.DataBind();

            if (insertItemSelect)
            {
                dropDownList.Items.Insert(0, new ListItem("--Seleccione--", "0"));
            }
        }

        /// <summary>
        /// Metodo para llenar un DropdownList
        /// </summary>
        /// <param name="dropDownList"></param>
        /// <param name="data"></param>
        public void Bind(DropDownList dropDownList, IList data, string value, string text, bool insertItemSelect)
        {
            dropDownList.DataSource = data;
            dropDownList.DataValueField = value;
            dropDownList.DataTextField = text;
            dropDownList.DataBind();

            if (insertItemSelect)
            {
                dropDownList.Items.Insert(0, new ListItem("--Seleccione--", "0"));
            }
        }

        /// <summary>
        /// Metodo para llenar un DropdownList
        /// </summary>
        /// <param name="dropDownList"></param>
        /// <param name="data"></param>
        public void Bind(DropDownList dropDownList, IList data, TipoDropDownList tipo)
        {
            dropDownList.DataSource = data;
            dropDownList.DataValueField = "Value";
            dropDownList.DataTextField = "Text";
            dropDownList.DataBind();

            dropDownList.Items.Insert(0, new ListItem(tipo.ToString(), "0"));
        }

        /// <summary>
        /// Metodo para llenar un DropdownList
        /// </summary>
        /// <param name="dropDownList"></param>
        /// <param name="data"></param>
        public void Bind(DropDownList dropDownList, IList data)
        {
            dropDownList.DataSource = data;
            dropDownList.DataValueField = "Value";
            dropDownList.DataTextField = "Text";
            dropDownList.DataBind();

        }

        /// <summary>
        /// Metodo para llenar un CheckBoxList
        /// </summary>
        /// <param name="dropDownList"></param>
        /// <param name="data"></param>
        public void Bind(CheckBoxList checkBoxList, IList data, string value, string text)
        {
            checkBoxList.DataSource = data;
            checkBoxList.DataValueField = value;
            checkBoxList.DataTextField = text;
            checkBoxList.DataBind();
        }

        /// <summary>
        /// Metodo para llenar un Telerik DropdownList
        /// </summary>
        /// <param name="dropDownList"></param>
        /// <param name="data"></param>
        public void Bind(RadDropDownList dropDownList, IList data)
        {
            dropDownList.DataSource = data;
            dropDownList.DataValueField = "Value";
            dropDownList.DataTextField = "Text";
            dropDownList.DataBind();
        }

        /// <summary>
        /// Metodo para llenar un Telerik Combobox
        /// </summary>
        /// <param name="comboBox"></param>
        /// <param name="data"></param>
        public void Bind(RadComboBox comboBox, IList data)
        {
            comboBox.DataSource = data;
            comboBox.DataValueField = "Value";
            comboBox.DataTextField = "Text";
            comboBox.DataBind();
        }

        #endregion

        #region Sobreescribibles
        protected virtual void Limpiar()
        { }
        protected virtual void Listar()
        { }
        protected virtual void Nuevo()
        { }
        protected virtual void Modificar()
        { }
        protected virtual void Guardar()
        { }
        protected virtual void Cancelar()
        { }
        protected virtual void Eliminar()
        { }
        protected virtual bool Validar()
        {
            return true;
        }
        protected virtual bool Validar(ref  StringBuilder sb)
        {
            return true;
        }
        protected virtual void CargarRegistro()
        { }
        protected virtual void MostrarMensaje(string mensaje, enmTipoMensajeMostrar tipoMensaje = enmTipoMensajeMostrar.Informativa)
        {

        }

        protected virtual void OcultarMensaje()
        {

        }
        protected virtual void MostrarMensajeValidacion(string mensaje)
        {

        }
        protected virtual void OcultarMensajeValidacion()
        {

        }
        #endregion

        protected string ObtenerEstiloMensaje(enmTipoMensajeMostrar tipoMensaje = enmTipoMensajeMostrar.Informativa)
        {
            string css = string.Empty;
            if (tipoMensaje == enmTipoMensajeMostrar.Informativa)
                css = "alert alert-success";

            if (tipoMensaje == enmTipoMensajeMostrar.Error)
                css = "alert alert-danger";

            if (tipoMensaje == enmTipoMensajeMostrar.Advertencia)
                css = "alert alert-warning alert-dismissable";
            return css;
        }

        protected List<SearchBoxData> ObtenerListItemAnios()
        {
            List<SearchBoxData> anios = new List<SearchBoxData>();
            for (int i = 2000; i < 2030; i++)
            {
                var searchBoxData = new SearchBoxData() { Value = i.ToString(), Text = i.ToString() };
                anios.Add(searchBoxData);
            }
            return anios;
        }
    }


}